/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import java.io.UnsupportedEncodingException;

import java.util.Properties;
import java.util.regex.Pattern;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author cleiton
 */
public class Email {

    private String emailRemetente;
    private String emailReceptor;
    private String mensagem;
    private String nomeRemetente;
    private String titulo;
    private String nomeReceptor;

    /**
     *Classe criada para Enviar Email
     * @param emailRemetente
     * @param mensagem
     * @param nomeRemetente
     * @param titulo
     * @param nomeReceptor
     */
    public Email(String emailRemetente, String mensagem, String nomeRemetente, String titulo, String nomeReceptor) {
        this.emailRemetente = emailRemetente;
        this.mensagem = mensagem;
        this.nomeRemetente = nomeRemetente;
        this.titulo = titulo;
        this.nomeReceptor = nomeReceptor;
    }


    /**
     * Classe criada para Enviar Email
     * @param remetente
     * @param receptor
     * @param mensagem
     * @param titulo
     */
    public Email(String remetente, String receptor, String mensagem, String titulo) {
        this.emailRemetente = remetente;
        this.emailReceptor = receptor;
        this.mensagem = mensagem;
        this.titulo = titulo;
    }

    /**
     * Classe para criar Email
     * @param senha
     * @param smtp
     * @param porta
     * @throws MessagingException
     * @throws UnsupportedEncodingException
     */
    public void enviarEmail(final String senha, String smtp, String porta) throws MessagingException, UnsupportedEncodingException {

        Properties propriedades = System.getProperties();
        propriedades.put("mail.smtp.transport.protocol", "smtp");
        propriedades.put("mail.smtp.host", smtp);
        propriedades.put("mail.smtp.auth", "true");
        propriedades.put("mail.smtp.port", porta);
        propriedades.put("mail.smtp.starttls.enable", "true");
        propriedades.put("mail.smtp.socketFactory.port", porta);
        propriedades.put("mail.smtp.socketFactory.fallback", "false");
        propriedades.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        Authenticator auth = new Authenticator() {

            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(getEmailRemetente(), senha);
            }
        };

        Session session = Session.getInstance(propriedades, auth);
        MimeMessage message = new MimeMessage(session);
        message.setFrom(new InternetAddress(this.getEmailRemetente(), this.getNomeRemetente()));
        message.addRecipient(Message.RecipientType.TO,
                new InternetAddress(this.getEmailReceptor(), this.getNomeReceptor()));
        message.setSubject(this.getTitulo());
        message.setContent(this.mensagem, "text/plain");
        Transport.send(message);

    }
/**
 * Envia email diretamento para o Gmail. Na porta 547.
 * @param senha
 * @throws MessagingException
 * @throws UnsupportedEncodingException
 */
    public void enviarPeloGmail(final String senha) throws MessagingException, UnsupportedEncodingException {
        this.enviarEmail(senha, "smtp.gmail.com", "547");
    }

    /**
     * Verifica se Email é valido.
     * @param email
     * @return
     */
    public static boolean isEmailValido(String email) {
        return Pattern.matches("[a-zA-Z0-9]+[a-zA-Z0-9_.-]+@{1}[a-zA-Z0-9_.-]*\\.+[a-z]{2,4}", email);
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public String getEmailReceptor() {
        return emailReceptor;
    }

    public void setEmailReceptor(String emailReceptor) {
        this.emailReceptor = emailReceptor;
    }

    public String getNomeReceptor() {
        return nomeReceptor;
    }

    public void setNomeReceptor(String nomeReceptor) {
        this.nomeReceptor = nomeReceptor;
    }

    public String getNomeRemetente() {
        return nomeRemetente;
    }

    public void setNomeRemetente(String nomeRemetente) {
        this.nomeRemetente = nomeRemetente;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public String getReceptor() {
        return emailReceptor;
    }

    public void setReceptor(String receptor) {
        this.emailReceptor = receptor;
    }

    public String getEmailRemetente() {
        return emailRemetente;
    }

    public void setEmailRemetente(String remetente) {
        this.emailRemetente = remetente;
    }

    @Override
    public String toString() {
        StringBuilder string = new StringBuilder();
        string.append("Remetente").append(this.getNomeRemetente());
        string.append(":").append(this.getEmailRemetente()).append("\n");
        string.append("Receptor").append(this.getNomeReceptor());
        string.append(":").append(this.getEmailReceptor()).append("\n");
        string.append(this.getMensagem()).append("\n");
        return string.toString();
    }
}
